home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / iw / timezone.py < prev    next >
Encoding:
Python Source  |  2000-03-08  |  8.3 KB  |  241 lines

  1. from gtk import *
  2. from iw import *
  3. import string
  4. from gnome.ui import GnomeCanvas
  5. from translate import _
  6.  
  7. import timezonemap
  8.  
  9. class Map (GnomeCanvas):
  10.     def __init__ (self, map):
  11.         self._o = map
  12.  
  13. class List (GtkScrolledWindow):
  14.     def __init__ (self, list):
  15.         self._o = list
  16.  
  17. class Status (GtkStatusbar):
  18.     def __init__ (self, bar):
  19.         self._o = bar
  20.  
  21. class Option (GtkOptionMenu):
  22.     def __init__ (self, option):
  23.         self._o = option
  24.  
  25. class TimezoneWindow (InstallWindow):
  26.  
  27.     def __init__ (self, ics):
  28.     InstallWindow.__init__ (self, ics)
  29.  
  30.         ics.setTitle (_("Time Zone Selection"))
  31.         ics.setNextEnabled (1)
  32.         ics.readHTML ("timezone")
  33.         self.old_page = 0
  34.         self.old_ulist_row = 9 # default to UTC row
  35.         self.old_use_dst = 0
  36.  
  37.     self.timeZones = ((("-14", ""), ("Etc/GMT-14", "Etc/GMT-14")),
  38.                           (("-13", ""), ("Etc/GMT-13", "Etc/GMT-13")),
  39.                           (("-12", ""), ("Etc/GMT-12", "Etc/GMT-12")),
  40.                           (("-11", ""), ("Etc/GMT-11", "Etc/GMT-11")),
  41.                           (("-10", ""), ("Etc/GMT-10", "Etc/GMT-10")),
  42.                           (("-09", ""), ("Etc/GMT-9", "Etc/GMT-9")),
  43.                           (("-08", "US Pacific"),  ("Etc/GMT-8", "America/Los_Angeles")),
  44.                           (("-07", "US Mountain"), ("Etc/GMT-7", "America/Denver")),
  45.                           (("-06", "US Central"),  ("Etc/GMT-6", "America/Chicago")),
  46.                           (("-05", "US Eastern"),  ("Etc/GMT-5", "America/New_York")),
  47.                           (("-04", ""), ("Etc/GMT-4", "Etc/GMT-4")),
  48.                           (("-03", ""), ("Etc/GMT-3", "Etc/GMT-3")),
  49.                           (("-02", ""), ("Etc/GMT-2", "Etc/GMT-2")),
  50.                           (("-01", ""), ("Etc/GMT-1", "Etc/GMT-1")),
  51.                           (("",       ""), ("Etc/GMT", "Etc/GMT")),
  52.                           (("+01", ""), ("Etc/GMT+1", "Etc/GMT+1")),
  53.                           (("+02", ""), ("Etc/GMT+2", "Etc/GMT+2")),
  54.                           (("+03", ""), ("Etc/GMT+3", "Etc/GMT+3")),
  55.                           (("+04", ""), ("Etc/GMT+4", "Etc/GMT+4")),
  56.                           (("+05", ""), ("Etc/GMT+5", "Etc/GMT+5")),
  57.                           (("+06", ""), ("Etc/GMT+6", "Etc/GMT+6")),
  58.                           (("+07", ""), ("Etc/GMT+7", "Etc/GMT+7")),
  59.                           (("+08", ""), ("Etc/GMT+8", "Etc/GMT+8")),
  60.                           (("+09", ""), ("Etc/GMT+9", "Etc/GMT+9")),
  61.                           (("+10", ""), ("Etc/GMT+10", "Etc/GMT+10")),
  62.                           (("+11", ""), ("Etc/GMT+11", "Etc/GMT+11")),
  63.                           (("+12", ""), ("Etc/GMT+12", "Etc/GMT+12")))                    
  64.  
  65.     def getNext (self):
  66.     if not self.__dict__.has_key('list'): return None
  67.  
  68.         self.old_page = self.nb.get_current_page ()
  69.         self.old_ulist_row = self.ulist.selection[0]
  70.         self.old_use_dst = self.daylightCB.get_active ()
  71.         
  72.         if (self.old_page == 0):
  73.             self.todo.setTimezoneInfo (self.list.get_text (self.list.selection[0], 0),
  74.                                        self.systemUTC.get_active ())
  75.         else:
  76.             timezone = self.timeZones[self.ulist.selection[0]][1]
  77.             if self.daylightCB.get_active ():
  78.                 timezone = timezone[1]
  79.             else:
  80.                 timezone = timezone[0]
  81.             self.todo.setTimezoneInfo (timezone, self.systemUTC.get_active ())
  82.  
  83.         return None
  84.  
  85.     def copy_toggled (self, cb1, cb2):
  86.         if cb1.get_data ("toggling"): return
  87.         
  88.         cb2.set_data ("toggling", 1)
  89.         cb2.set_active (cb1.get_active ())
  90.         cb2.set_data ("toggling", 0)
  91.  
  92.     def view_change (self, widget, *args):
  93.         if not self.list.selection:
  94.             self.ics.setNextEnabled (FALSE)
  95.         else:
  96.             self.ics.setNextEnabled (TRUE)
  97.  
  98.     def setcurrent (self, widget, area):
  99.         self.tz.setcurrent (self.default)
  100.         widget.disconnect (self.id)
  101.         
  102.     def getScreen (self):
  103.         try:
  104.             f = open ("/usr/share/anaconda/pixmaps/map480.png")
  105.             f.close ()
  106.         except:
  107.             path = "gnome-map/map480.png"
  108.         else:
  109.             path = "/usr/share/anaconda/pixmaps/map480.png"
  110.         
  111.     nb = GtkNotebook ()
  112.         self.nb = nb
  113.  
  114.         mainBox = GtkVBox (FALSE, 5)
  115.  
  116.         tz = timezonemap.new (path)
  117.         self.tz = tz
  118.         map = Map (tz.map)
  119.         swList = List (tz.citylist)
  120.         self.list = swList.children ()[0]
  121.  
  122.     rc = self.todo.getTimezoneInfo()
  123.     if rc:
  124.         (self.default, asUTC, asArc) = rc
  125.     else:
  126.         self.default = "America/New_York"
  127.         asUTC = 0
  128.  
  129.         if (string.find (self.default, "UTC") != -1):
  130.             self.default = "America/New_York"
  131.  
  132.         self.id = self.list.connect ("draw", self.setcurrent)
  133.  
  134.         self.nb.connect ("realize", lambda widget, self=self:
  135.                          self.nb.set_page (self.old_page))
  136.  
  137.         status = Status (tz.statusbar)
  138.         views = Option (tz.views)
  139.  
  140.  
  141.         for menu_item in views.get_menu ().children ():
  142.             menu_item.connect ("activate", self.view_change)
  143.  
  144.     # fix for current map weirdness in dr mike's code.
  145.     views.get_menu ().children ()[0].activate ()
  146.  
  147.         label = GtkLabel (_("View:"))
  148.         hbox = GtkHBox (FALSE, 5)
  149.         hbox.pack_start (label, FALSE)
  150.         align = GtkAlignment (0.5, 0.5)
  151.         align.add (views)
  152.         hbox.pack_start (align, FALSE)
  153.         self.p1_align = align
  154.  
  155.         systemUTCCopy = GtkCheckButton (_("System clock uses UTC"))
  156.         self.systemUTC = GtkCheckButton (_("System clock uses UTC"))
  157.  
  158.         systemUTCCopy.connect ("toggled", self.copy_toggled, self.systemUTC)
  159.         self.systemUTC.connect ("toggled", self.copy_toggled, systemUTCCopy)
  160.  
  161.         self.systemUTC.set_active (asUTC)
  162.  
  163.         align = GtkAlignment (0.5, 0.5)
  164.         align.add (self.systemUTC)
  165.         hbox.pack_start (align, FALSE)
  166.  
  167.         im = self.ics.readPixmap ("timezone.png")
  168.         if im:
  169.             im.render ()
  170.             pix = im.make_pixmap ()
  171.             a = GtkAlignment ()
  172.             a.add (pix)
  173.             a.set (1.0, 0.0, 0.0, 0.0)
  174.             hbox.pack_start (a, TRUE)
  175.         
  176.         frame = GtkFrame ()
  177.         frame.set_shadow_type (SHADOW_IN)
  178.         frame.add (map)
  179.         
  180.         mainBox.pack_start (hbox, FALSE)
  181.         box = GtkVBox (FALSE, 0)
  182.         box.pack_start (frame, FALSE)
  183.         box.pack_start (status, FALSE)
  184.         mainBox.pack_start (box, FALSE)
  185.         mainBox.pack_start (swList, TRUE)
  186.  
  187.     tzBox = GtkVBox (FALSE)
  188.         sw = GtkScrolledWindow ()
  189.         sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
  190.     self.ulist = GtkCList (2)
  191.         self.ulist.connect ("draw", lambda widget, area, self=self:
  192.                             self.ulist.moveto (self.old_ulist_row))
  193.         self.ulist.set_selection_mode (SELECTION_BROWSE)
  194.         self.ulist.freeze ()
  195.         for zone in self.timeZones:
  196.             self.ulist.append (("UTC%s" % (zone[0][0],), zone[0][1]))
  197.         self.ulist.columns_autosize ()
  198.         self.ulist.thaw ()
  199.         self.ulist.select_row (self.old_ulist_row, 0)
  200.         sw.add (self.ulist)
  201.         tzBox.pack_start (sw)
  202.         box = GtkHBox (FALSE)
  203.         align = GtkAlignment (0.5, 0.5)
  204.         self.daylightCB = GtkCheckButton (_("Use Daylight Saving Time (US only)"))
  205.         self.daylightCB.set_active (self.old_use_dst)
  206.         align.add (self.daylightCB)
  207.         box.pack_start (align, FALSE)
  208.  
  209.         align = GtkAlignment (1.0, 0.5)
  210.         align.add (systemUTCCopy)
  211.  
  212.         box.pack_start (align, TRUE)
  213.         tzBox.pack_start (box, FALSE)
  214.         tzBox.set_border_width (5)
  215.         self.tzBox = tzBox
  216.  
  217.         mainBox.set_border_width (5)
  218.     nb.append_page (mainBox, GtkLabel (_("Location")))
  219.         nb.append_page (tzBox, GtkLabel (_("UTC Offset")))
  220.  
  221.         def switch_page (widget, page, page_num, self=self):
  222.             if page_num == 1:
  223.                 self.ics.setNextEnabled (TRUE)
  224.             else:
  225.                 self.view_change (None)
  226.                 
  227.         nb.connect ("switch_page", switch_page)
  228.         self.list.connect ("select_row", self.view_change)
  229.         
  230.         box = GtkVBox (FALSE, 5)
  231.         box.pack_start (nb)
  232. #        self.systemUTC = GtkCheckButton (_("System clock uses UTC"))
  233. #        self.systemUTC.set_active (asUTC)
  234. #        align = GtkAlignment (0, 0)
  235. #        align.add (self.systemUTC)
  236. #        box.pack_start (align, FALSE)
  237.         box.set_border_width (5)
  238.  
  239.         return box
  240.  
  241.